---
id: 5900f49a1000cf542c50ffac
title: 'Завдання 300: згортання білка'
challengeType: 1
forumTopicId: 301954
dashedName: problem-300-protein-folding
---

# --description--

Якщо говорити простими словами, білки — це ланцюжки, які складаються з гідрофобних (H) та полярних (P) елементів. Наприклад, HHPPHHHPHHPH.

У цьому завданні важлива орієнтація білка, оскільки HPP відрізняється від PPH. Отже, існує $2^n$ різних білків, які складаються з $n$ елементів.

Якщо наткнутись на ці ланцюжки в природі, то вони завжди згорнуті таким чином, що кількість точок дотику H-H максимально велика, оскільки це енергетично вигідно.

Як результат, H-елементи накопичуються у внутрішній частині, а P-елементи — у зовнішній.

Природні білки, звісно, згортаються в тривимірному просторі, але ми розглядатимемо цей процес у <u>двовимірному просторі</u>.

На зображенні нижче показні два можливих способи, як можуть згортатися білки (точки дотику Н-Н виділені червоним).

<img class="img-responsive center-block" alt="два можливих приклади згортання білків" src="https://cdn.freecodecamp.org/curriculum/project-euler/protein-folding.gif" style="background-color: white; padding: 10px;" />

Приклад зліва має лише шість точок дотику, тому ніколи б не відбувся натуральним шляхом. З іншого боку, згортання праворуч має дев’ять точок дотику H-H, що оптимально для цього ланцюжка.

Припускаючи, що ймовірність зустріти елементи H та P на будь-якому місці ланцюжка є однаковою, то середня кількість точок дотику H-H в оптимальному згортанні випадкового білкового ланцюжка з 8 елементів становить $\frac{850}{2^8} = 3.3203125$.

Якою буде середня кількість точок дотику H-H в оптимальному згортанні випадкового білкового ланцюжка з 15 елементів? Надайте чітку відповідь, використавши стільки знаків після коми, скільки потрібно.

# --hints--

`proteinFolding()` має повернути `8.0540771484375`.

```js
assert.strictEqual(proteinFolding(), 8.0540771484375);
```

# --seed--

## --seed-contents--

```js
function proteinFolding() {

  return true;
}

proteinFolding();
```

# --solutions--

```js
// solution required
```
